﻿using System;
using System.Collections.Generic;
using System.Data.OleDb;
using System.Data;

namespace Controllers
{
    public class ViajeController
    {
        public static List<Viaje> ObtenerViajesDuplicados(int pagina, int cantidadRegistros)
        {
            var list = new List<Viaje>();

            var sql = "Select TOP " + cantidadRegistros + " vr.*  From Superacidos.ViajesRepetidos vr ";

            var where = "";

            if (pagina > 1)
            {
                int limiteAnterior = (pagina - 1) * cantidadRegistros;


                where += " IdGenerado NOT IN " + "(Select TOP " + limiteAnterior +
                         " IdGenerado from Superacidos.ViajesRepetidos ORDER BY IdGenerado) ";
            }


            if (!string.IsNullOrEmpty(where))
            {
                sql += " WHERE " + where;
            }

            var reader = ConexionBaseDeDatos.GetData(sql, CommandType.Text);

            if (reader.HasRows)
            {
                while (reader.Read())
                {
                    list.Add(ObtenerObjetoDuplicado(reader));
                }
            }

            return list;
        }

        public static Viaje ObtenerObjetoDuplicado(OleDbDataReader reader)
        {
            var Viaje = new Viaje();

            if (reader["IdGenerado"] != DBNull.Value)
                Viaje.Viaje_Id = Convert.ToInt32(reader["IdGenerado"]);
            if (reader["Viaje_Fecha"] != DBNull.Value)
                Viaje.Viaje_Fecha = (DateTime)reader["Viaje_Fecha"];
            if (reader["Viaje_TurnoId"] != DBNull.Value)
                Viaje.Viaje_TurnoId = (int)reader["Viaje_TurnoId"];
            if (reader["Viaje_ChoferId"] != DBNull.Value)
                Viaje.Viaje_ChoferId = (int)reader["Viaje_ChoferId"];
            if (reader["Viaje_AutoId"] != DBNull.Value)
                Viaje.Viaje_AutoId = (int)reader["Viaje_AutoId"];
            if (reader["Viaje_Repeticiones"] != DBNull.Value)
                Viaje.Viaje_Repeticiones = (int)reader["Viaje_Repeticiones"];
            if (reader["Viaje_Auto"] != DBNull.Value)
                Viaje.Viaje_Auto = (string)reader["Viaje_Auto"];
            if (reader["Viaje_Chofer"] != DBNull.Value)
                Viaje.Viaje_Chofer = (string)reader["Viaje_Chofer"];
            if (reader["Viaje_Turno"] != DBNull.Value)
                Viaje.Viaje_Turno = (string)reader["Viaje_Turno"];

            return Viaje;
        }

        public static Viaje ObtenerObjeto(OleDbDataReader reader)
        {
            var Viaje = new Viaje();

            if (reader["Viaje_Id"] != DBNull.Value)
                Viaje.Viaje_Id = Convert.ToInt32(reader["Viaje_Id"]);
            if (reader["Viaje_Fecha"] != DBNull.Value)
                Viaje.Viaje_Fecha = (DateTime)reader["Viaje_Fecha"];
            if (reader["Viaje_TurnoId"] != DBNull.Value)
                Viaje.Viaje_TurnoId = (int)reader["Viaje_TurnoId"];
            if (reader["Viaje_ChoferId"] != DBNull.Value)
                Viaje.Viaje_ChoferId = (int)reader["Viaje_ChoferId"];
            if (reader["Viaje_AutoId"] != DBNull.Value)
                Viaje.Viaje_AutoId = (int)reader["Viaje_AutoId"];
            if (reader["Viaje_Cant_Fichas"] != DBNull.Value)
                Viaje.Viaje_Cant_Fichas = (decimal)reader["Viaje_Cant_Fichas"];
            if (reader["Viaje_ClienteId"] != DBNull.Value)
                Viaje.Viaje_ClienteId = (int)reader["Viaje_ClienteId"];
            if (reader["Viaje_Cliente"] != DBNull.Value)
                Viaje.Viaje_Cliente = (string)reader["Viaje_Cliente"];
            if (reader["Viaje_Importe"] != DBNull.Value)
                Viaje.Viaje_Importe = (decimal)reader["Viaje_Importe"];


            return Viaje;
        }

        public static int ObtenerCantidadDuplicados()
        {
            var sql = "Select count(*) as Cantidad From Superacidos.ViajesRepetidos";

            var cantidad = 0;
            var reader = ConexionBaseDeDatos.GetData(sql, CommandType.Text);

            if (reader.HasRows)
            {
                reader.Read();
                if (reader["Cantidad"] != DBNull.Value)
                    cantidad = (int)reader["Cantidad"];
            }

            return cantidad;
        }

        public static List<Viaje> ObtenerRepeticiones(Viaje viaje)
        {
            var list = new List<Viaje>();

            var sql = "Select *,(c.Cliente_Apellido + ' '+ c.Cliente_Nombre) as Viaje_Cliente, " +
                      " ISNULL(Viaje_Importe ,0) AS Viaje_Importe " +
                      "  From Superacidos.Viaje LEFT JOIN Superacidos.Cliente C on c.Cliente_Id =  Superacidos.Viaje.Viaje_ClienteId " +
                      " INNER JOIN Superacidos.Turno turno on turno.Turno_Id =  Superacidos.Viaje.Viaje_TurnoId ";

            sql += " WHERE Viaje_ChoferId = {0} AND Viaje_AutoId = {1} AND Viaje_TurnoId = {2} AND Viaje_Fecha = '{3}'";

            sql = string.Format(sql, viaje.Viaje_ChoferId, viaje.Viaje_AutoId, viaje.Viaje_TurnoId,
                                viaje.Viaje_Fecha.ToString("yyyy-MM-dd HH:mm:ss.fff"));

            try
            {


                var reader = ConexionBaseDeDatos.GetData(sql, CommandType.Text);

                if (reader.HasRows)
                {
                    while (reader.Read())
                    {
                        list.Add(ObtenerObjeto(reader));
                    }
                }
            }
            catch (Exception)
            {

                throw;
            }

            return list;
        }

        public static void EliminarViaje(Viaje viaje)
        {
            var sql = "delete from superacidos.viaje where viaje_id =" + viaje.Viaje_Id;

            ConexionBaseDeDatos.Guardar(sql, CommandType.Text);
        }
    }
}
